/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package gradius.Elementos.Tiros;

import gradius.InterfaceGrafica.TelaGrafica;
import gradius.Elementos.Tipos.tipoTiro;
import gradius.Util.Util;
import java.awt.Image;
import java.awt.Toolkit;
import java.net.URL;
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;
import javazoom.jl.decoder.JavaLayerException;

/** Classe Factory que retorna instâncias de tiros. Também monta o vetor de imagens dos tiros animados.
 * @author Eduardo
 */
public class TiroFactory
{
    /** Construtor da classe TiroFactory
     */
    private TiroFactory()
    {
    }

    /** Método que retorna instâncias de tiros e monta o vetor de imagens para tiros animados.
     * @param tela - Painel de desenho do jogo
     * @param tipo - Tipo de tiro de determinada nave
     * @param coordX - Coordenada do eixo horizontal
     * @param coordY - Coordenada do eixo vertical
     * @return Tiro - Tiro que a nave solta
     */
    public static Tiro getInstance(TelaGrafica tela,tipoTiro tipo, int coordX, int coordY)
    {
        if (tipo == tipoTiro.MISSIL)
        {
            Image[] imagens = new Image[5];
            for (int i = 0; i < imagens.length; i++)
            {
                String filename = "/images/missil1/m" + i + ".png";
                URL url = TiroFactory.class.getResource(filename);
                imagens[i] = Toolkit.getDefaultToolkit().getImage(url);
            }
            Missil missil = new Missil(tela,imagens,coordX,coordY,45,14);
            if (!(Util.foraDaTelaTiro(missil, tela)))
            {
                try
                {
                    missil.pl.play("sounds/missil.mp3");
                }
                catch (JavaLayerException ex)
                {
                    Logger.getLogger(TelaGrafica.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            return missil;
        }
        else if (tipo == tipoTiro.BALA)
        {
            Image[] imagens = new Image[5];
            for (int i = 0; i < imagens.length; i++)
            {
                String filename = "/images/bala/b" + i + ".png";
                URL url = TiroFactory.class.getResource(filename);
                imagens[i] = Toolkit.getDefaultToolkit().getImage(url);
            }
            Bala bala = new Bala(tela,imagens,coordX,coordY,30,8);
            if (!(Util.foraDaTelaTiro(bala, tela)))
            {
                try
                {
                    bala.pl.play("sounds/bala.mp3");
                }
                catch (JavaLayerException ex)
                {
                    Logger.getLogger(TelaGrafica.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            return bala;
        }
        else if (tipo == tipoTiro.LASER)
        {
            Image[] imagens = new Image[5];
            for (int i = 0; i < imagens.length; i++)
            {
                String filename = "/images/laser1/l" + i + ".png";
                URL url = TiroFactory.class.getResource(filename);
                imagens[i] = Toolkit.getDefaultToolkit().getImage(url);
            }
            Laser laser = new Laser(tela,imagens,coordX,coordY,70,5);
            if (!(Util.foraDaTelaTiro(laser, tela)))
            {
                try
                {
                    laser.pl.play("sounds/laser.mp3");
                }
                catch (JavaLayerException ex)
                {
                    Logger.getLogger(TelaGrafica.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            return laser;
        }
        else if (tipo == tipoTiro.QUADRADINHO)
        {
            Image[] imagens = new Image[5];
            for (int i = 0; i < imagens.length; i++)
            {
                String filename = "/images/quadradinho/q" + i + ".png";
                URL url = TiroFactory.class.getResource(filename);
                imagens[i] = Toolkit.getDefaultToolkit().getImage(url);
            }
            Random rand = new Random();
            Quadradinho quadradinho = new Quadradinho(tela,imagens,coordX,coordY,15,15,-1 * rand.nextInt(16),(int)Math.pow((double)-1,(double)rand.nextInt(3)) * rand.nextInt(16));
            if (!(Util.foraDaTelaTiro(quadradinho, tela)))
            {
                try
                {
                    quadradinho.pl.play("sounds/quadradinho.mp3");
                }
                catch (JavaLayerException ex)
                {
                    Logger.getLogger(TelaGrafica.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            return quadradinho;
        }
        else if (tipo == tipoTiro.LASER2)
        {
            Image[] imagens = new Image[5];
            for (int i = 0; i < imagens.length; i++)
            {
                String filename = "/images/laser2/l" + i + ".png";
                URL url = TiroFactory.class.getResource(filename);
                imagens[i] = Toolkit.getDefaultToolkit().getImage(url);
            }
            Laser2 laser = new Laser2(tela,imagens,coordX,coordY,70,5);
            if (!(Util.foraDaTelaTiro(laser, tela)))
            {
                try
                {
                    laser.pl.play("sounds/laser.mp3");
                }
                catch (JavaLayerException ex)
                {
                    Logger.getLogger(TelaGrafica.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            return laser;
        }
        return null;
    }
}
